package com.fuyao.cloud.admin.flow.service.flowable;

import com.fuyao.cloud.admin.flow.dto.ModelInfoVo;
import com.fuyao.cloud.admin.flow.model.ModelInfo;
import com.fuyao.cloud.admin.flow.model.User;
import com.fuyao.cloud.common.core.util.R;
import com.fuyao.cloud.common.security.service.CloudUser;
import org.flowable.engine.repository.Deployment;
import org.flowable.ui.modeler.domain.Model;

import java.io.InputStream;

public interface IFlowableBpmnService {
    /**
     * 验证流程图
     *
     * @param modelId     模型ID
     * @param fileName    文件名称
     * @param modelStream 模型文件流
     * @return
     */
    R<String> validateBpmnModel(String modelId, String fileName, InputStream modelStream);

    /**
     * 导入bpmn模型
     *
     * @param modelId     模型ID
     * @param fileName    文件名称
     * @param modelStream 模型文件流
     * @param user        登录用户
     * @return
     */
    R<String> importBpmnModel(String modelId, String fileName, InputStream modelStream, CloudUser user);

    /**
     * 发布流程
     *
     * @param modelId 模型id
     * @return
     */
    R<String> publishBpmn(String modelId);

    /**
     * 部署流程
     *
     * @param modelInfo 模型的扩展信息
     * @return
     */
    R<Deployment> deployBpmn(ModelInfo modelInfo);

    /**
     * 创建初始化BPMN模型
     *
     * @param modelInfo 参数
     * @return
     */
    R<Model> createInitBpmn(ModelInfo modelInfo, CloudUser user);

    /**
     * 加载bpmn的xml文件
     *
     * @param modelId 流程模型id
     * @return
     */
    ModelInfoVo loadBpmnXmlByModelId(String modelId);

    ModelInfoVo loadBpmnXmlByModelKey(String modelKey);
}
